package com.tianji.promotion.controller;


import com.tianji.common.domain.dto.PageDTO;
import com.tianji.promotion.domain.dto.CouponFormDTO;
import com.tianji.promotion.domain.dto.CouponIssueFormDTO;
import com.tianji.promotion.domain.query.CouponQuery;
import com.tianji.promotion.domain.vo.CouponDetailVO;
import com.tianji.promotion.domain.vo.CouponPageVO;
import com.tianji.promotion.service.ICouponService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * <p>
 * 优惠券的规则信息 前端控制器
 * </p>
 *
 * @author 老李头儿
 * @since 2025-04-03
 */
@RestController
@RequestMapping("/coupons")
@RequiredArgsConstructor
@Api(tags ="优惠券相关端口")
public class CouponController {


    private final ICouponService couponService;

    /**
    * @Description 新增优惠券接口
    * @Author 老李头儿
    * @Date 2025年04月03 15:32:02
    * @param dto
    * @Return void
    **/
    @ApiOperation("新增优惠券接口")
    @PostMapping
    public void saveCoupon(@RequestBody @Valid CouponFormDTO dto){
        couponService.saveCoupon(dto);
    }


    /**
    * @Description 分页查询优惠券接口
    * @Author 老李头儿
    * @Date 2025年04月03 20:35:20
    * @param query
    * @Return com.tianji.common.domain.dto.PageDTO<com.tianji.promotion.domain.vo.CouponPageVO>
    **/
    @ApiOperation("分页查询优惠券接口")
    @GetMapping("/page")
    public PageDTO<CouponPageVO> queryCouponPage(CouponQuery query){
        return couponService.queryCouponPage(query);
    }

    /**
    * @Description 发放优惠券接口
    * @Author 老李头儿
    * @Date 2025年04月03 20:56:21
    * @param dto
    * @Return void
    **/

    @ApiOperation("发放优惠券接口")
    @PutMapping("/{id}/issue")
    public void issueCoupon(@RequestBody @Valid CouponIssueFormDTO dto){
        couponService.issueCoupon(dto);
    }


    /**
    * @Description 修改优惠券接口
    * @Author 老李头儿
    * @Date 2025年04月03 20:56:21
    * @param dto
    * @Return void
    **/
    @ApiOperation("修改优惠券接口")
    @PutMapping("/{id}")
    public void updateCoupon(@RequestBody CouponIssueFormDTO dto){
        couponService.updateCoupon(dto);
    }

    /**
    * @Description 删除优惠券接口
    * @Author 老李头儿
    * @Date 2025年04月04 13:47:41
    * @param dto
    * @Return void
    **/
    @ApiOperation("删除优惠券接口")
    @DeleteMapping("/{id}")
    public void deleteCoupon(CouponIssueFormDTO dto){
        couponService.deleteCoupon(dto);
    }


    /**
    * @Description 根据id查询优惠券详情接口
    * @Author 老李头儿
    * @Date 2025年04月04 14:16:17
    * @param id
    * @Return com.tianji.promotion.domain.vo.CouponDetailVO
    **/
    @ApiOperation("根据id查询优惠券详情接口")
    @GetMapping("/{id}")
    public CouponDetailVO queryCouponDetail(@PathVariable("id") Long id){
        return couponService.queryCouponDetail(id);
    }

    /**
    * @Description 暂停发放优惠券接口
    * @Author 老李头儿
    * @Date 2025年04月04 15:10:48
    * @param id
    * @Return void
    **/
    @ApiOperation("暂停发放优惠券接口")
    @PutMapping("/{id}/pause")
    public void pauseCoupon(@PathVariable("id") Long id){
        couponService.pauseCoupon(id);
    }

}
